{{tag>bureautique}}

----

====== Patch : application d'un patch dans un répertoire ======

Patch permet d'appliquer un patch obtenu au moyen d'un diff (svn diff, git diff, ...)

Il suffit d'[[:tutoriel:comment_installer_un_paquet|installer le paquet]] **[[apt>patch|patch]]**.
=====Utilisation=====

==== Créer un patch entre deux fichiers ==== 
Pour créer un patch entre deux fichiers, il suffit de taper la commande :

  diff -u fichier1 fichier2 > mon.patch

==== Créer un patch entre deux répertoires ==== 
Pour créer un patch entre deux répertoires, il suffit de taper la commande :

  diff -Naur rep1/ rep2/ > mon.patch

==== Patcher un dossier ==== 
L'utilisation de l'outil patch se fait en ligne de commande. La syntaxe est la suivante :

  patch -p0 < mon.patch


Ceci appliquera le patch "mon.patch" dans le répertoire courant.

-p0 indique que nous prenons les paths du patch en entier.
Par exemple :
+++ monProjet/test.c
va appliquer ce patch dans le sous répertoire monProjet sur le fichier test.c.
Si nous avions spécifié -p1 il aurait cherché test.c à la racine de notre répertoire courant.


==== Patcher tous les fichiers indiqués par le patch ==== 

  patch < mon.patch

==== Patcher explicitement un seul fichier ==== 

  patch monfichier.truc < mon.patch

==== Patcher en mode verbeux sans appliquer réellement le patch ==== 

  patch --verbose --dry-run < mon.patch

==== Retour arrière sur un passage de patch  ==== 

  patch --reverse < mon.patch
  
==== Application d'un patch avec conservation des permissions  ==== 
<note warning>Attention: La commande patch ne preserve pas les permissions, mais les positionne en 644, cela est important notamment lorsqu'on patch un fichier dans /etc/grub.d/ par exemple.
</note>
Pour préserver les permissions, il faut utiliser l'option **''%%--backup%%''** et ensuite faire un chmod **''%%--reference%%''**, exemple :

  cd /etc/grub.d/ && patch --backup -p3 00_header_754921.patch
  chmod --reference=00_header.orig 00_header

----
//Contributeurs: dufoli//